package com.atguigu.lease.admin.controller;

import com.atguigu.lease.admin.service.FileService;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.common.result.ResultCodeEnum;
import com.atguigu.lease.common.util.FileType;
import com.atguigu.lease.common.util.FileUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author LOGIN
 * @title FileController
 * @create 2025/6/23 11:36
 * @description
 */
@Tag(name="文件管理模块")
@RestController
@RequestMapping("/admin/file")
public class FileController  {
    @Autowired
    FileService fileService;
    /*
        前端提交文件 -》 后端接受文件
            保存文件 : 以后会设计文件的 访问 、 权限控制、删除、修改 文件隔离
                可以使用第三方的系统来管理文件：
                    本地搭建： minio 公司有自己的服务器 可以自己使用minio管理文件
                                    > 我们已经安装了minio 并且添加为了linux的服务
                                        systemctl start/stop/restart/disable/status minio
                            云服务器：OSS对象存储（阿里云  腾讯云）  收费
          前端接受响应的图片地址 可以渲染到页面中  《-- 将报讯文件的url地址返回
     */

    @Operation(summary = "1、图片上传")
    @PostMapping("/upload")
    public Result<String> upload(@RequestParam("file") MultipartFile file) throws Exception {
        //校验文件：防止恶意文件上传（原理：校验文件上传的 数据流的头，如果是常见的数据流头，允许上传，否则拒绝）
        FileType fileType= FileUtil.getType(file.getInputStream());
        if (fileType == null) {
            //上传文件的格式不是我们允许的格式，拒绝本次请求
            return Result.error(ResultCodeEnum.UPLOAD_DATA_ERROR);
        }
        String url = fileService.upload(file);
        return Result.ok(url);
    }
}
